
using Core.Extensions;
using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Features;
using Core.Resources;

namespace Core.Items.Robots
{
    /// <summary>
    /// Prometheus mk2 robot class
    /// </summary>
    
    public sealed class PrometheusMk2 : RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.PrometheusMk2"/> class.
        /// </summary>
        public PrometheusMk2()
            : base(
            "Prometheus Mk2",
            Traduction.desc_prometheus,
            FactionsEnum.Thelodica,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.Light,
            new ISlot[]{ 
				new Slot(0, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small),
				new Slot(1, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(2, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small),
				new Slot(3, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Missile|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules), },
            new IFeature<object>[]{ 
				new AccumulatorCapacity<double>(300),
				new AccumulatorRechargeTime<double>(120),
				new CpuPerformance<double>(140),
				new ReactorPerformance<double>(170),
				new ArmorAmount<double>(850),
				new ChemicalResistance<double>(30),
				new KineticResistance<double>(150),
				new SeismicResistance<double>(10),
				new ThermalResistance<double>(45),
                new ChemicalEHP<double>(0),
                new KineticEHP<double>(0),
                new SeismicEHP<double>(0),
                new ThermalEHP<double>(0),
				new SurfaceHitSize<double>(3.00),
				new InterferenceEmission<double>(4.00),
				new InterferenceMinimum<double>(80.00),
				new InterferencePeak<double>(280.00),
				new InterferenceRadius<double>(150.00),
				new LockingRange<double>(150),
				new LockingTime<double>(12.50),
				new MaximumTargets<double>(5),
				new MissileGuidanceFailure<double>(0.1),
				new SensorStrength<double>(120),
				new SignalDetection<double>(120.00),
				new SignalMasking<double>(100.00),
				new ReloadingTime<double>(10),
				new CargoCapacity<double>(3.75),
				new RobotMass<double>(7080.00),
				new SlopeCapacity<double>(56),
				new TopSpeed<double>(77.40),
				new Volume<double>(12.00),
                new DemobilizerResistance<double>(0),
                new CriticalHitChance<double>(0)},
            new IBonusModifier[]
                {
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Robot, FeaturesEnum.CriticalHitChance, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Critical hit chance"},
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallLaserDamage, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Small laser damage"},
                    new BonusModifier<ThelodicaRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallLaserCycleTime, -0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Small laser cycle time"},
                    new BonusModifier<ThelodicaRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumLaserCycleTime, -0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Medium laser cycle time"},
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Robot, FeaturesEnum.ChemicalResistance, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Chemical resistance"},
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Robot, FeaturesEnum.SeismicResistance, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Seismic resistance"},
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Robot, FeaturesEnum.KineticResistance, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Kinetic resistance"},
                    new BonusModifier<BasicRobotics>( FeatureTypesEnum.Robot, FeaturesEnum.ThermalResistance, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Thermal resistance"},
                    new BonusModifier<ThelodicaRobotControl>( FeatureTypesEnum.Robot, FeaturesEnum.AccumulatorCapacity, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Accumulator capacity"},
                },
            new ICondition<IExtension>[] 
            {
                new ExtensionCondition<ThelodicaRobotControl>(3),
                new ExtensionCondition<BasicRobotics>(1)
            })
        {
        }
    }
}